#ifndef FUNCTIONS_H
#define FUNCTIONS_H

#include "structs.h"
#include <string>


/*
 * Recebe dados do usuario conforme especificacoes
 * e insere-os no grafo
 */
Grafo input(Vertice* no_origem,Vertice* no_destino){
  int num_vertices;
  printf("Digite abaixo o numero de nos:\n");
  printf("_>");
  scanf("%d",&num_vertices);
  printf("Digite abaixo o no de origem e o no de destino,separados por espacos: \n");
  printf("Ex.: 1 6 \n");
  printf("_>");
  scanf("%d %d",no_origem,no_destino);
  
  Grafo g = cria_grafo(num_vertices,10*num_vertices);

  printf("Digite abaixo o inicio e fim dos arcos e o tempo de cada arco,separados por espacos: \n");
  printf("Ex.: 1 2 10 \n");
  printf("     1 3 20 \n");
  printf("     1 4 11 \n");
  printf("Digite -1 para encerrar a entrada de arcos. \n");
  int ini_arco,fim_arco,tempo_arco;
  char input[10];
  std::cin.getline(input,10); //nao pergunte.
  while(true){
    printf("_>");
    std::cin.getline(input,10);
    if(strcmp(input,"-1") == 0)
      break;
    if(sscanf(input,"%d %d %d",&ini_arco,&fim_arco,&tempo_arco) == 3){
      insere_arco(g,ini_arco,fim_arco,tempo_arco);      
    }
  }
  return g;
}

void output(Grafo g,Vertice no_origem,Vertice no_destino){
  /* debug info
  printf("Arcos:\n");
  imprime(g);
  printf("Matriz de adjacencias:\n");
  imprime_matriz(g);*/

  printf("\n\n");
  int resultado = caminho_valido(g,no_origem,no_destino);
  if(resultado == 0)
    printf("Caminho inexistente no grafo!\n");
  else{
    printf("Tempo: %d\n",resultado);
    printf("Caminho: ");
    Vertice v;
    for (v = no_destino; v != no_origem; v = g->pais[v])
      printf("%d-",v);
    printf("%d\n",no_origem);
  }
  printf("\n");  
}

#endif // FUNCTIONS_H
